Karakters in C#
Home

Karakters in C#

Karakters in C#

In het .NET Framework zijn karakters (chars) altijd 16-bit Unicode waarden. Dat hebben de ontwerpers van het .NET Framework speciaal gedaan om het ontwerpen van globale applicaties te vergemakkelijken. Unicode-tekens worden gebruikt om de meeste geschreven talen over de hele wereld weer te geven.

System.Char

Gebruik

Filmpje: Karakters in C#

Een waarde van het type System.Char stelt precies 1 karakter voor zoals: a, A, 5, [, &. In een variable van het type Char kan je dus maar 1 karakter stoppen.

Er bestaan een heleboel verschillende karakters. Je hebt natuurlijk de letters, kleine- en hoofdletters, de cijfers. Maar er zijn ook nog andere tekens. Denk maar aan symbolen voor geld, $, €. Daarnaast zijn er talen met andere tekens dan de letters uit ons alfabet. Het moderne chinees (mandarijns) telt ongeveer 10.000 verschillende tekens. Naast het latijns alfabet, is er nog het alfabet voor het arabisch en het hebreeuws. Alles tesamen zijn dat een hoop verschillende tekens.

Vandaar dat het type System.Char 65.535 verschillende tekens kan bevatten. En dat is genoeg om alle tekens van alle talen over heel de wereld mee voor te stellen. Je kan de beneden- en bovengrens van het aantal karakters dat het type System.Char kan voorstellen opvragen met behulp van twee methoden in de structure System.Char. De structure heeft twee velden van het type constant MinValue, gedefinieerd al \0 en MaxValue gedefinieerd als \uFFFF.

Deze set van karakters, 65.535 in het totaal, wordt de Unicode standaardset genoemd. Op Wikipedia kan je er meer over lezen.

Een paar voorbeelden:

ASCII leestekens en symbolen

U+003A

:

Dubbelpunt

U+003B

;

Puntkomma

U+003C

<

Kleiner dan

U+003D

=

Gelijkheidsteken

U+003E

>

Groter dan

U+003F

?

Vraateken

U+0040

@

Apestaart

Hoofdletters latijns alfabet

U+0041

A

Latin Capital letter A

U+0042

B

Latin Capital letter B

U+0043

C

Latin Capital letter C

U+0044

D

Latin Capital letter D

U+0045

E

Latin Capital letter E

Er bestaan verschillende soorten karakters. Soms is het nodig te weten tot welke soort een bepaald karakter behoort. Is het een letter, of een cijfer of een geldsymbool, enz. Om dat te weten te komen kan je de static GetUnicodeCategory oproepen. Die methode retourneert een waarde van het System.Globalisation.UnicodeCategory opsommingtype. Die waarde geeft aan als het karakter:

Die categoriën zijn door de Unicode standaard is vastgelegd.

char ch2 = '2';
string str = "Upper Case";
Console.WriteLine(Char.GetUnicodeCategory('a'));	// Output: "LowercaseLetter"
Console.WriteLine(Char.GetUnicodeCategory(ch2));	// Output: "DecimalDigitNumber"
Console.WriteLine(Char.GetUnicodeCategory(str, 6));	// Output: "UppercaseLetter"

De structure Char bevat static methoden om die taak te vergemakkelijken. De meeste methoden roepen intern de GetUniCodeCategory op en retourneren false of true.
IsDigit, IsLetter, IsWhiteSpace, IsUpper, IsLower, IsPunctuation, IsLetterOrDigit, IsControl, IsNumber, IsSeparator, IsSurrogate, IsLowSurrogate, IsHighSurrogate, IsSymbol, retourneert welk soort karakter er in Char zit.

Je kan een karakter van kleine letter naar hoofdletter omzetten zonder rekening te houden met de ingestelde cultuur op de lokale computer met ToLowerInvariant of ToUpperInvariant. Als je ToLower of ToUpper gebruikt wordt er rekening gehouden met de cultuur informatie door de static CurrentCulture eigenschap op te roepen van de System.Threading.Tread. Je kan zelf een bepaalde cultuur specificeren door een instantie van CultureInfo klasse aan die methoden mee te geven. Voor de Fransen bijvoorbeeld is é in hoofdletter É.

De ToString methode retourneert een string die uit één karakter bestaat. Parse en TryParse daarentegen nemen een string, die uit één karakter bestaat, aan en retourneren een UTF-16 code point.

char chA = 'A';
char ch1 = '1';
string str = "test string"; 

Console.WriteLine(chA.CompareTo('B'));		// Output: "-1" (meaning 'A' is 1 less than 'B')
Console.WriteLine(chA.Equals('A'));		// Output: "True"
Console.WriteLine(Char.GetNumericValue(ch1));	// Output: "1"
Console.WriteLine(Char.IsControl('\t'));	// Output: "True"
Console.WriteLine(Char.IsDigit(ch1));		// Output: "True"
Console.WriteLine(Char.IsLetter(','));		// Output: "False"
Console.WriteLine(Char.IsLower('u'));		// Output: "True"
Console.WriteLine(Char.IsNumber(ch1));		// Output: "True"
Console.WriteLine(Char.IsPunctuation('.'));	// Output: "True"
Console.WriteLine(Char.IsSeparator(str, 4));	// Output: "True"
Console.WriteLine(Char.IsSymbol(' '));		// Output: "True"
Console.WriteLine(Char.IsWhiteSpace(str, 4));	// Output: "True"
Console.WriteLine(Char.Parse("S"));		// Output: "S"
Console.WriteLine(Char.ToLower('M'));		// Output: "m"
Console.WriteLine('x'.ToString());		// Output: "x"

Let erop dat de methode static is. Dit wil zeggen dat we geen instantie of een object moeten aanmaken van de klasse alvorens de methode te gebruiken.

Oefening

  1. Hoe je de oefening maakt zie je in het filmpje: Karakters in C# Oefening.
  2. Probeer de code hierboven uit in een static methode met de naam CharLerenGebruiken in de klasse met de naam WerkenMetGegevens in de namespace met de naam LerenWerkenMetCSharp.
  3. Test deze methode in de Main methode in Program.cs.
  4. Maak een methode met de naam ShowAllAsciiValues in de klasse WerkenMetGegevens, die je kan aanroepen zonder eerst een instantie te moeten creëren, die alle afdrukbare ASCII waarden (8-bit versie) in de console
    1. Hou er rekening mee dat sommige ASCII tekens niet afdrukbaar zijn omdat ze het afdrukken beïnvloeden. ASCII 9 is bijvoorbeeld het tabteken en genereert dus een tab. Als het ASCII teken niet afdrukbaar is vermeld je dat het een control character is (zie afbeelding hieronder).
    2. Om een ASCII waarde (int) om te zetten naar char gebruik je een cast:
      (char)(i)
    3. Om een gecaste char om te zetten naar een string kan je gebruik maken van de ronde haakjes:
      ((char)(i)).ToString()

JI
2018-09-27 15:38:56